package main

import (
	json2 "encoding/json"
	"fmt"
	"go_web/test_demo/demo6_db/model"
	"net/http"
)

// 创建处理器函数
func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "请求地址是: ", r.URL.Path)
	fmt.Fprintln(w, "请求地址后的字符串是: : ", r.URL.RawQuery)
	fmt.Fprintln(w, "请求头中的所有信息是: : ", r.Header)
	fmt.Fprintln(w, "请求头中的Accept-Encoding信息是: : ", r.Header["Accept-Encoding"])
	fmt.Fprintln(w, "请求头中的Accept-Encoding属性值是: : ", r.Header.Get("Accept-Encoding"))
	// 获取form表单中内容:
	// 请求体内容的长度
	len := r.ContentLength
	// 创建切片
	body := make([]byte, len)
	// 请求体内容读到body
	r.Body.Read(body)
	// form表单的值
	fmt.Fprintln(w, "请求体内容有: ", string(body))

	// 解析表单, 调用r.Form之前必须执行该操作
	r.ParseForm()
	// 获取请求参数,form表单的请求地址的参数值
	fmt.Fprintln(w, "请求参数有: ", r.Form)
	fmt.Fprintln(w, "Post请求的form表单参数有: ", r.PostForm)

	// 直接获取请求参数的值
	fmt.Fprintln(w, "url中的user请求参数: ", r.FormValue("username"))
	fmt.Fprintln(w, "Form表单中的username请求参数的值: ", r.PostFormValue("username"))
}

func testJsonRes(w http.ResponseWriter, r *http.Request) {
	// 设置相应内容类型
	w.Header().Set("Content-Type", "application/json")
	// 创建user
	user := model.User{
		ID:       1,
		Username: "admin",
		Password: "123456",
		Email:    "123@qq.com",
	}
	// 转为json
	json, _ := json2.Marshal(user)
	w.Write(json)
}

// 重定向:
func testRedirect(w http.ResponseWriter, r *http.Request) {
	// 设置响应头的Location
	w.Header().Set("Location", "https://www.baidu.com")
	// 设置响应状态码
	w.WriteHeader(302)
}

func main() {
	// 调用处理器处理请求
	http.HandleFunc("/hello", handler)
	http.HandleFunc("/testJsonRes", testJsonRes)
	http.HandleFunc("/testRedirect", testRedirect)
	// 路由
	http.ListenAndServe(":8080", nil)

}
